In order to operate user applications on a device such as a terminal, there is a need for a process of compiling application codes constructed by program languages and a process of executing compiled binaries (that is, execution codes).
Various processing devices (that is, HW modules) for executing binaries may be included in a terminal. A central processing unit (CPU) is representative of the processing devices. The terminal may include, other than a CPU, single instruction multiple data (SIMD), Parallel-SIMD, a graphic processing unit (GPU), a general purpose GPU (GPGPU), or a digital signal processor (DSP).
Attempts to effectively use various processing devices in terminals have been made only by application developers up to now. Applications that are operated on processing devices in terminals are developed using hardware (HW)-specified (that is, processing device-specified) application programmable interfaces (API) (for example, an OpenCL for a GPU). That is, the applications for processing devices are developed through languages other than languages (C/C++, Java, etc.) that are generally used. The HW-specified APIs sufficiently function as tools that enable corresponding applications to be operated on corresponding processing devices, but efficient use of the processing devices is actually implemented manually only by application developers.
Accordingly, developed applications are operated only in accordance with instructions (that is, scheduling) set by developers. In other words, in order to operate a specific code of an application on a specific processing device, an application developer has to construct the code in a language (for an API) for the processing device. Further, the developer has also to consider synchronization of processing devices.